package Persistencia;

import Negocio.Funcionario;
import java.io.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;



public class FuncionarioDAO extends BaseDAO {

        private PreparedStatement stIncluir;
        private PreparedStatement stLista;
        private PreparedStatement stRemover;
        private PreparedStatement stConsulta;
        private PreparedStatement stTroca;

        public FuncionarioDAO() throws IOException {
            super();
            Connection con = getConexao();
            try {
                stIncluir = con.prepareStatement("INSERT INTO funcionario (nome,endereco,cpf,salario) VALUES (?,?,?,?)");
                stLista = con.prepareStatement("SELECT * FROM funcionario order by numero");
                stRemover = con.prepareStatement("DELETE * FROM funcionario WHERE nomeU=?");
                stConsulta=con.prepareStatement("SELECT * FROM funcionario WHERE nome ilike ? ");
                stTroca = con.prepareStatement("UPDATE funcionario set nome=?,endereco=?,cpf=?,salario=? where numero=?");
            } catch(SQLException e) {
                throw new IOException("Nao foi possivel criar as consultas: " + e.getMessage());
            }
        }

	public void incluir(Funcionario f) throws IOException {
		try {

                    stIncluir.setString(1, f.getNome());
                    stIncluir.setString(2, f.getEndereco());
                    stIncluir.setString(3, f.getCpf());
                    stIncluir.setDouble(4, f.getSalario());
              
                    stIncluir.executeUpdate();
                } catch(SQLException e) {
                    throw new IOException("Erro ao incluir: " + e.getMessage());
                }
	}

	public ArrayList<Funcionario> consulta() throws IOException {
		ArrayList<Funcionario> tmp = new ArrayList<Funcionario>();
		try {
                        ResultSet rs = stLista.executeQuery();
                        while(rs.next()) {
                            tmp.add(new Funcionario(rs.getInt("numero"),rs.getString("nome"),rs.getString("endereco"),rs.getString("cpf"),rs.getDouble("salario")));
                        }
		} catch(SQLException e) {
			throw new IOException("Erro ao consultar: " + e.getMessage());
		}
             return tmp;
        }
             public ArrayList<Funcionario> consultaPorNome(String nome) throws IOException {
		ArrayList<Funcionario> tmp = new ArrayList<Funcionario>();
		try {
                        stConsulta.setString(1, nome + "%" );
              
                        ResultSet rs = stConsulta.executeQuery();
                        while(rs.next()) {
                            tmp.add(new Funcionario(rs.getString("nome"),rs.getString("endereco"),rs.getString("cpf"),rs.getDouble("salario")));
                        }
		} catch(SQLException e) {
			throw new IOException("Erro ao consultar: " + e.getMessage());
		}
             return tmp;
             
	}
             public void trocar(Funcionario f) throws IOException {
		try {

                    stTroca.setString(1, f.getNome());
                    stTroca.setString(2, f.getEndereco());
                    stTroca.setString(3, f.getCpf());
                    stTroca.setDouble(4, f.getSalario());
                    stTroca.setInt(5, f.getNumero());
                    stTroca.executeUpdate();
                } catch(SQLException e) {
                    throw new IOException("Erro ao incluir: " + e.getMessage());
                }
	}
}
